const { AsyncParallelHook } = require('./tapable');
let hook = new AsyncParallelHook(['name', 'age']);

// 异步并行执行
// 异步注册，全部任务完成后才会执行call中回调，类似promise.all
console.time('cost')
hook.tapAsync('1', (name, age, callback) => {
  setTimeout(() => {
    console.log(1, name, age);
    callback()
  }, 1000)
})

hook.tapAsync('2', (name, age, callback) => {
  setTimeout(() => {
    console.log(2, name, age);
    callback()
  }, 2000)
})

hook.tapAsync('3', (name, age, callback) => {
  setTimeout(() => {
    console.log(3, name, age);
    callback()
  }, 3000)
})

hook.callAsync('zb', 28, (err) => {
  console.log(err, 'err', 'callback');
  console.log('callback');
  console.timeEnd('cost')
})
debugger;
// hook.tapPromise('1', (name, age) => {
//   return new Promise((resolve, reject) => {
//     setTimeout(() => {
//       console.log(1, name, age)
//       resolve()
//     }, 1000)
//   })
// })

// hook.tapPromise('2', (name, age) => {
//   return new Promise((resolve, reject) => {
//     setTimeout(() => {
//       console.log(2, name, age);
//       resolve(2)
//     }, 2000)
//   })
// })

// hook.tapPromise('3', (name, age) => {
//   return new Promise((resolve, reject) => {
//     setTimeout(() => {
//       console.log(3, name, age);
//       resolve()
//     }, 3000)
//   })
// })

// hook.promise('zb', 28).then(result => {
//   console.log(result);
//   console.timeEnd('cost')
// })


